home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 22 / AACD 22.iso / AACD / Sound / mhi_dev / MASPro / Source / test.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-04-02  |  5.6 KB  |  254 lines

  1. #include <stdio.h>
  2. #include <exec/libraries.h>
  3. #include <exec/memory.h>
  4. #include <pragma/exec_lib.h>
  5. #include <pragma/dos_lib.h>
  6. #include <dos/dos.h>
  7.  
  8. #include <mhi.h>
  9. #include <clib/mhi_protos.h>
  10. #include <mhi_lib.h>
  11.  
  12. #define NUMBUFS    7
  13. #define BUFSIZE    10000
  14.                         //12800
  15.                         //204800
  16.  
  17. struct LibBase *MHIBase;
  18.  
  19. void main(int argc, char *argv[])
  20. {
  21.     char temp;
  22.     struct Task *mytask;
  23.     BYTE    mysignal;
  24.     ULONG    sigmask, tempsigs;
  25.     APTR     handle, handle2;
  26.     FILE     *fp;
  27.     APTR    bufmem[NUMBUFS+1];
  28.     ULONG    loaded[NUMBUFS+1];
  29.     int    i, bufsleft;
  30.     BOOL    flag;
  31.     APTR    usedbuf;
  32.     int    usedbufnum;
  33.     
  34.     mytask = FindTask(0);
  35.     printf("My task is at: %ld\n",mytask);
  36.  
  37.     if (-1 == (mysignal = AllocSignal(-1)))
  38.     {
  39.         printf("No signals available! Crazy man!\n");
  40.         exit(20);
  41.     }
  42.  
  43.     sigmask = 1L << mysignal;
  44.     printf("My signal mask: %ld\n",sigmask);
  45.  
  46.     if (MHIBase = (struct LibBase *) OpenLibrary("mhi/mhimaspro.library",0))
  47.     {
  48.         printf("Allocating MHI\n");
  49.         handle = MHIAllocDecoder(mytask, sigmask);
  50.         if (handle)
  51.             printf("Handle allocated at: %ld\n",handle);
  52.         else
  53.             printf("Allocation failed, returned %ld\n",handle);
  54.  
  55.         printf("Allocating MHI second time\n");
  56.         handle2 = MHIAllocDecoder(mytask, 0L);
  57.         if (handle2)
  58.             printf("Handle allocated at: %ld\n",handle2);
  59.         else
  60.             printf("Allocation failed, returned %ld\n",handle2);
  61.             
  62.         printf("\nDecoder details:\n");
  63.         printf("Name:    %s\n", MHIQuery(MHIQ_DECODER_NAME));
  64.         printf("Version: %s\n", MHIQuery(MHIQ_DECODER_VERSION));
  65.         printf("Author:  %s\n", MHIQuery(MHIQ_AUTHOR));
  66.  
  67.         printf("\nQuerying decoder abilities:\n");
  68.  
  69.         printf("Supported MPEG versions:  ");
  70.         if ( MHIQuery(MHIQ_MPEG1) )
  71.             printf("MPEG-1 ");
  72.         if ( MHIQuery(MHIQ_MPEG2) )
  73.             printf("MPEG-2 ");
  74.         if ( MHIQuery(MHIQ_MPEG25) )
  75.             printf("MPEG-2.5 ");
  76.         if ( MHIQuery(MHIQ_MPEG4) )
  77.             printf("MPEG-4 ");
  78.         printf("\n");
  79.  
  80.         printf("Supported audio layers:   ");
  81.         if (MHIQuery(MHIQ_LAYER1) )
  82.             printf("Layer-1 ");
  83.         if (MHIQuery(MHIQ_LAYER2) )
  84.             printf("Layer-2 ");        
  85.         if (MHIQuery(MHIQ_LAYER3) )
  86.             printf("Layer-3 ");
  87.         printf("\n");
  88.         
  89.         printf("Variable bitrate streams: ");
  90.         if ( MHIQuery(MHIQ_VARIABLE_BITRATE) )
  91.             printf("Yes\n");
  92.         else
  93.             printf("No\n");
  94.             
  95.         printf("Joint sterio encoding:    ");
  96.         if ( MHIQuery(MHIQ_JOINT_STERIO) )
  97.             printf("Yes\n");
  98.         else
  99.             printf("No\n");
  100.         
  101.         printf("Bass control:             ");
  102.         if ( MHIQuery(MHIQ_BASS_CONTROL) )
  103.             printf("Yes\n");
  104.         else
  105.             printf("No\n");        
  106.  
  107.         printf("Treble control:           ");
  108.         if ( MHIQuery(MHIQ_TREBLE_CONTROL) )
  109.             printf("Yes\n");
  110.         else
  111.             printf("No\n");
  112.  
  113.         printf("Mid control:              ");
  114.         if ( MHIQuery(MHIQ_MID_CONTROL) )
  115.             printf("Yes\n");
  116.         else
  117.             printf("No\n");
  118.  
  119.         if (argc != 0)
  120.         {
  121.             printf("\MHI Status: %ld", MHIGetStatus(handle));
  122.  
  123.             printf("\nBuffering MPEG audio stream..\n");
  124.         
  125.             flag = FALSE;
  126.             for (i=0; i<=NUMBUFS; i++)
  127.             {
  128.                 bufmem[i] = AllocMem(BUFSIZE, MEMF_CLEAR);
  129.                 if (bufmem[i] == 0)
  130.                     flag = TRUE;
  131.             }
  132.  
  133.             if (flag == TRUE)
  134.                 printf("Could not allocate memory!\n");
  135.             else
  136.             {
  137.                 if ( (fp = fopen(argv[1], "r")) == 0)
  138.                     printf("Could not lock file!\n");
  139.                 else
  140.                 {
  141.                     for (i=0; i<=NUMBUFS; i++)
  142.                         loaded[i] = fread(bufmem[i], 1, BUFSIZE, fp);
  143.  
  144. /*
  145.                     for (i=0; i<=NUMBUFS; i++)
  146.                     {
  147.                         printf ("Buffer %ld = %ld\n", i, bufmem[i]);
  148.                         printf ("Loaded %ld = %ld\n", i, loaded[i]);
  149.                     }
  150. */
  151.                 
  152.                     for (i=0; i<=NUMBUFS; i++)
  153.                         if (loaded[i] != 0)
  154.                             MHIQueueBuffer(handle, bufmem[i], loaded[i]);
  155.                 }
  156.             }
  157.  
  158.             printf("Playing MPEG stream..\n");
  159.             MHIPlay(handle);
  160.  
  161.  
  162. //            printf("Waiting 1 sec..\n");
  163. //            Delay(50);
  164.             
  165. //            MHISetParam(handle, MHIP_PREFACTOR, 0);
  166.             
  167. //            printf("Pausing for 1 sec..\n");
  168. //            MHIPause(handle);
  169. //            printf("Setting Bass..\n");
  170. //            MHISetBass(handle, 50);
  171. //            MHISetTreble(handle, 50);
  172. //            MHISetPrefactor(handle, 50);
  173. //            Delay(25);
  174. //            MHISetVolume(handle, 50);
  175. //            Delay(50);
  176. //            printf("Playing to end..\n");
  177. //            MHIPlay(handle);
  178.  
  179.         
  180.  
  181.             flag = FALSE;
  182.  
  183.             while (flag == FALSE)
  184.             {
  185.                 tempsigs = Wait(sigmask | SIGBREAKF_CTRL_C);
  186. //                printf("Got back MHI signal!\n");
  187.                 if (tempsigs == SIGBREAKF_CTRL_C)
  188.                 {
  189.                     printf("Got CTRL-C!\n");
  190.                     flag = TRUE;
  191.                 }
  192.                 else
  193.                 {
  194.                     while (usedbuf = MHIGetEmpty(handle))
  195.                     {
  196. //                        printf("MHIGetEmpty = %ld\n", usedbuf);
  197.                         usedbufnum = -1;
  198.                         for (i=0; i<=NUMBUFS; i++)
  199.                         {
  200.                             if (usedbuf == bufmem[i])
  201.                             {
  202.                                 usedbufnum = i;
  203. //                                printf("Got back empty buf %ld\n", usedbufnum);
  204.                             }
  205.                         }
  206.                         if (usedbufnum != -1)
  207.                         {
  208.                             loaded[usedbufnum] = fread(bufmem[usedbufnum], 1, BUFSIZE, fp);
  209. //                            printf ("Buffer %ld = %ld\n", usedbufnum, bufmem[usedbufnum]);
  210. //                            printf ("Loaded %ld = %ld\n", usedbufnum, loaded[usedbufnum]);
  211.                             if (loaded[usedbufnum] != 0)
  212.                             {
  213.                                 MHIQueueBuffer(handle, bufmem[usedbufnum], loaded[usedbufnum]);
  214. //                                printf("Loaded buffer!\n");
  215.                             }
  216.                             else
  217.                             {
  218.                                 flag = TRUE;
  219. //                                printf("No buffer loaded\n");
  220.                             }
  221.                         }
  222.                     }
  223.                 }
  224.             }
  225.         }
  226.  
  227.         printf("End of file reached, waiting for audio to end.\n");
  228.         
  229.         while((MHIGetStatus(handle) == MHIF_PLAYING) && (tempsigs != SIGBREAKF_CTRL_C))
  230.         {
  231.             printf("Status: %ld\n", MHIGetStatus(handle));
  232.             tempsigs = Wait(sigmask | SIGBREAKF_CTRL_C);
  233.         }
  234.                     
  235.         printf("Stream finished. Last buffer decoded.\n");
  236.  
  237.  
  238. //        printf("\nEnter to quit");
  239. //        temp = getchar();
  240.  
  241.         printf("Freeing first handle\n");
  242.         MHIFreeDecoder(handle);
  243.  
  244.         for (i=0; i<=NUMBUFS; i++)
  245.             if (bufmem[i] != 0)
  246.                 FreeMem(bufmem[i], BUFSIZE);
  247.             
  248.         CloseLibrary((struct Library *) MHIBase);
  249.         
  250.         FreeSignal(mysignal);
  251.     }
  252.     else
  253.         printf("Unable to open \"mhidcr.library\".");
  254. }